package com.md.api;

import com.md.model.system.CommonResult;
import com.md.request.ApiRequest;
import com.md.request.AppInfoRequest;
import com.md.request.BatchIdRequest;
import com.md.request.QueryAppInfoRequest;
import com.md.request.QueryModuleRequest;
import com.md.response.ApiResponse;
import com.md.response.AppInfoResponse;
import com.md.response.ModuleResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author 刘骄阳
 * 2024-07-14 21:52
 */
@Api("开放接口-应用")
public interface OpenSystemApi {
  String PATH_PREFIX = "/open";

  /**
   * 查询应用信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/app-info/query")
  @ApiOperation("批量查询应用信息")
  CommonResult<AppInfoResponse> openQuery(@RequestBody QueryAppInfoRequest request);

  /**
   * 查询应用信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/app-info/query/list")
  @ApiOperation("批量查询应用信息")
  CommonResult<List<AppInfoResponse>> openQueryList(@RequestBody QueryAppInfoRequest request);

  /**
   * 批量查询应用信息根据ids
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/app-info/query/list/ids")
  @ApiOperation("批量查询应用信息根据ids")
  CommonResult<List<AppInfoResponse>> openQueryIdsList(@RequestBody BatchIdRequest request);

  /**
   * 新增appInfo
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/app-info/create")
  @ApiOperation("新增appInfo")
  CommonResult<Void> openCreateAppInfo(@RequestBody AppInfoRequest request);

  /**
   * 新增api
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/api/create")
  @ApiOperation("新增api")
  CommonResult<Void> openCreateApi(@RequestBody ApiRequest request);

  /**
   * 批量查询接口信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/api/query/list")
  @ApiOperation("批量查询接口信息")
  CommonResult<List<ApiResponse>> openQueryList(@RequestBody ApiRequest request);

  /**
   * 查询接口信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/api/query")
  @ApiOperation("查询接口信息")
  CommonResult<ApiResponse> openQuery(@RequestBody ApiRequest request);

  /**
   * 查询接口信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/api/query-method-url")
  @ApiOperation("查询接口信息")
  CommonResult<ApiResponse> openQueryByUrlMethod(@RequestBody ApiRequest request);

  /**
   * 批量查询模块信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/module/query/list")
  @ApiOperation("批量查询模块信息")
  CommonResult<List<ModuleResponse>> openQueryList(@RequestBody QueryModuleRequest request);

  /**
   * 批量查询模块信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/module/query/list-by-ids")
  @ApiOperation("批量查询模块信息")
  CommonResult<List<ModuleResponse>> openQueryListByIdList(@RequestBody QueryModuleRequest request);

  /**
   * 根据moduleId批量查询应用信息
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping(PATH_PREFIX + "/app-info/query/list-module-id")
  @ApiOperation("根据moduleId批量查询应用信息")
  CommonResult<List<AppInfoResponse>> openQueryListByModuleId(@RequestBody QueryAppInfoRequest request);

}
